package com.wjk.kylin.mall.common.web.stream;

import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;

import java.util.ArrayList;
import java.util.List;

/**
 * 抽象 查询执行器
 *
 * @param <T>
 * @author wangjinkui
 */
public abstract class AbstractResultHandler<T> implements ResultHandler<T> {
    // 这是每一个批处理查询的数量
    private int batchSize = 1000;
    //初始值
    public int size = 0;
    // 存储每批数据的临时容器
    public List<T> list = new ArrayList<>();

    public void handleResult(ResultContext<? extends T> resultContext) {
        // 这里获取流式查询每次返回的单条结果
        T data = resultContext.getResultObject();
        list.add(data);
        size++;
        if (size == batchSize) {
            handle();
        }
    }

    // 1.这个方需要子类重写此接口，处理具体业务逻辑
    public abstract void handle();

    //处理最后一批不到 batchSize(查询设定的阀值)的数据
    public void lastHandle() {
        handle();
    }

    public void setBatchSize(int batchSize) {
        this.batchSize = batchSize;
    }
}
